<?php

//Coded by Jonathan Gorard, 2012
//Part of The Matrix Unplugged, All Rights Reserved

	include "config.php";
	global $_CONFIG;
	define("MONO_ON", 1);
	require "class/class_db_{$_CONFIG['driver']}

.php";
$db=new database;
$db->configure($_CONFIG['hostname'], $_CONFIG['username'], $_CONFIG['password'], $_CONFIG['database'], $_CONFIG['persistent']);
$db->connect();
$c=$db->connection_id;
$set=array();
$settq=$db->query("SELECT * FROM settings");
while($r=$db->fetch_row($settq)){
	$set[$r['conf_name']]=$r['conf_value'];
}

//thx to http://www.phpit.net/code/valid-email/ for valid_email
function valid_email($email) {
	// First, we check that there's one @ symbol, and that the lengths are right
	
	if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
		// Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
		return false;
	}

	// Split it into sections to make life easier
	$email_array = explode("@", $email);
	$local_array = explode(".", $email_array[0]);
	for ($i = 0; $i < sizeof($local_array); $i++) {
		
		if (!ereg("^(([A-Za-z0-9!#$%&#038;'*+/=?^_`{|}~-][A-Za-z0-9!#$%&#038;'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) {
			return false;
		}

	}

	
	if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
		// Check if domain is IP. If not, it should be valid domain name
		$domain_array = explode(".", $email_array[1]);
		
		if (sizeof($domain_array) < 2) {
			return false;
			// Not enough parts to domain
		}

		for ($i = 0; $i < sizeof($domain_array); $i++) {
			
			if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) {
				return false;
			}

		}

	}

	return true;
}

session_start();
print <<<EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{$set['game_name']}

</title>
<script type="text/javascript">
var xmlHttp // xmlHttp variable
function GetXmlHttpObject(){ // This function we will use to call our xmlhttpobject.
var objXMLHttp=null // Sets objXMLHttp to null as default.
if (window.XMLHttpRequest){ // If we are using Netscape or any other browser than IE lets use xmlhttp.
objXMLHttp=new XMLHttpRequest() // Creates a xmlhttp request.
}else if (window.ActiveXObject){ // ElseIf we are using IE lets use Active X.
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP") // Creates a new Active X Object.
} // End ElseIf.
return objXMLHttp // Returns the xhttp object.
} // Close Function
function CheckPasswords(password){ // This is our fucntion that will check to see how strong the users password is.
xmlHttp=GetXmlHttpObject() // Creates a new Xmlhttp object.
if (xmlHttp==null){ // If it cannot create a new Xmlhttp object.
alert ("Browser does not support HTTP Request") // Alert Them!
return // Returns.
} // End If.
var url="check.php?password="+escape(password) // Url that we will use to check the password.
xmlHttp.open("GET",url,true) // Opens the URL using GET
xmlHttp.onreadystatechange = function () { // This is the most important piece of the puzzle, if onreadystatechange = equal to 4 than that means the request is done.
if (xmlHttp.readyState == 4) { // If the onreadystatechange is equal to 4 lets show the response text.
document.getElementById("passwordresult").innerHTML = xmlHttp.responseText; // Updates the div with the response text from check.php
} // End If.
}; // Close Function
xmlHttp.send(null); // Sends NULL insted of sending data.
} // Close Function.
function CheckUsername(password){ // This is our fucntion that will check to see how strong the users password is.
xmlHttp=GetXmlHttpObject() // Creates a new Xmlhttp object.
if (xmlHttp==null){ // If it cannot create a new Xmlhttp object.
alert ("Browser does not support HTTP Request") // Alert Them!
return // Returns.
} // End If.
var url="checkun.php?password="+escape(password) // Url that we will use to check the password.
xmlHttp.open("GET",url,true) // Opens the URL using GET
xmlHttp.onreadystatechange = function () { // This is the most important piece of the puzzle, if onreadystatechange = equal to 4 than that means the request is done.
if (xmlHttp.readyState == 4) { // If the onreadystatechange is equal to 4 lets show the response text.
document.getElementById("usernameresult").innerHTML = xmlHttp.responseText; // Updates the div with the response text from check.php
} // End If.
}; // Close Function
xmlHttp.send(null); // Sends NULL insted of sending data.
} // Close Function.
function CheckEmail(password){ // This is our fucntion that will check to see how strong the users password is.
xmlHttp=GetXmlHttpObject() // Creates a new Xmlhttp object.
if (xmlHttp==null){ // If it cannot create a new Xmlhttp object.
alert ("Browser does not support HTTP Request") // Alert Them!
return // Returns.
} // End If.
var url="checkem.php?password="+escape(password) // Url that we will use to check the password.
xmlHttp.open("GET",url,true) // Opens the URL using GET
xmlHttp.onreadystatechange = function () { // This is the most important piece of the puzzle, if onreadystatechange = equal to 4 than that means the request is done.
if (xmlHttp.readyState == 4) { // If the onreadystatechange is equal to 4 lets show the response text.
document.getElementById("emailresult").innerHTML = xmlHttp.responseText; // Updates the div with the response text from check.php
} // End If.
}; // Close Function
xmlHttp.send(null); // Sends NULL insted of sending data.
} // Close Function.
function PasswordMatch()
{
pwt1=document.getElementById('pw1').value;
pwt2=document.getElementById('pw2').value;
if(pwt1 == pwt2)
{
document.getElementById('cpasswordresult').innerHTML="<font color='green'>OK</font>";
}
else
{
document.getElementById('cpasswordresult').innerHTML="<font color='red'>Not Matching</font>";
}
}
</script>
<style type="text/css">
<!--
body {
background-color: #DEDEDE;
margin-top: 0px;
margin-bottom: 0px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:12px;
}
.lgrad {
background-image:url(lgrad.jpg);
background-repeat:repeat-y;
width:19px;
}
.linegrad {
background-image:url(linegrad.PNG);
background-repeat:repeat-y;
background-align: center;
width:2px;
}
.rgrad {
background-image:url(rgrad.jpg);
background-repeat:repeat-y;
width:19px;
}
.dgrad {
background-image:url(dgrad.jpg);
background-repeat:repeat-x;
height:38px;
}
.dgradl {
background-image:url(dgradl.jpg);
background-repeat:no-repeat;
height:38px;
width:38px;
}
.dgradr {
background-image:url(dgradr.jpg);
background-repeat:no-repeat;
height:38px;
width:38px;
}
.center {
width:932px;
background-color:#000000;
vertical-align:top;
text-align:center;
}
.table {
background-color:#000000;
}
.table3 {
background-color:#000000;
}
.table td {
background-color:#DEDEDE;
height:22px;
}
.table3 td {
background-color:#CCCCCC;
}
td .alt {
background-color:#EEEEEE;
height:22px;
}
td .h {
background-image:url(tablehgrad.png);
background-repeat:repeat-x;
font-weight: bold;
}
.table th {
background-image:url(tablehgrad.png);
background-repeat:repeat-x;
font-weight: bold;
}
-->
</style></head>
<body>
<center>
<table width="970" border="0" cellpadding="0" cellspacing="0" class="table2">
<tr>
<td class="lgrad"></td>
<td class="center"><img src="MatrixCode.jpg" alt="The Matrix Unplugged" width="850" height="200" /><br />
<!-- Begin Main Content -->
EOF;
$IP = ($_SERVER['HTTP_X_FORWARDED_FOR'])    ?  $_SERVER['HTTP_X_FORWARDED_FOR']    :
$_SERVER['REMOTE_ADDR'];

if(file_exists('ipbans/'.$IP)){
	die("<b><font color=red size=+1>Your IP has been banned, there is no way around this.</font></b></body></html>");
}


if($_POST['username']){
	
	if($set['regcap_on']){
		
		if(!$_SESSION['captcha'] or $_SESSION['captcha'] != $_POST['captcha'])  {
			unset($_SESSION['captcha']);
			die("Captcha Test Failed<br />
&gt;<a href='register.php'>Back</a>");
		}

		unset($_SESSION['captcha']);
	}

	
	if(!valid_email($_POST['email'])){
		die("<font color='green'>Sorry, the email is invalid.</font><br />
&gt;<a href='register.php'>Back</a>");
	}

	
	if(strlen($_POST['username']) < 4){
		die("<font color='green'>Sorry, the username is too short.</font><br />
&gt;<a href='register.php'>Back</a>");
	}

	$sm=100;
	$username=$_POST['username'];
	$username=str_replace(array("<", ">"), array("&lt;", "&gt;"), $username);
	$q=$db->query("SELECT * FROM users WHERE username='{$username}

' OR login_name='{$username}

'");
$q2=$db->query("SELECT * FROM users WHERE email='{$_POST['email']}

'");

if($db->num_rows($q)){
	print "Username already in use. Choose another.<br />
&gt;<a href='register.php'>Back</a>";
} else
if($db->num_rows($q2)){
	print "E-Mail already in use. Choose another.<br />
&gt;<a href='register.php'>Back</a>";
} else
if($_POST['password'] != $_POST['cpassword']){
	print "The passwords did not match, go back and try again.<br />
&gt;<a href='register.php'>Back</a>";
} else{
	$_POST['ref'] = abs((int) $_POST['ref']);
	$IP = ($_SERVER['HTTP_X_FORWARDED_FOR'])    ?  $_SERVER['HTTP_X_FORWARDED_FOR']    :
	$_SERVER['REMOTE_ADDR'];
	$q=$db->query("SELECT * FROM users WHERE lastip='$IP' AND userid={$_POST['ref']}

");

if($db->num_rows($q)){
	die("No creating referral multies. Bad dog.<br />
&gt;<a href='register.php'>Back</a>");
}


if($_POST['ref']) {
	$q=$db->query("SELECT * FROM users WHERE userid={$_POST['ref']}

");
$r=$db->fetch_row($q);
}

$db->query("INSERT INTO users (username, login_name, userpass, level, money, crystals, donatordays, user_level, energy, maxenergy, will, maxwill, brave, maxbrave, hp, maxhp, location, gender, signedup, email, bankmoney, lastip, lastip_signup) VALUES( '{$username}

', '{$username}

', md5('{$_POST['password']}

'), 1, $sm, 0, 0, 1, 12, 12, 100, 100, 5, 5, 100, 100, 1, '{$_POST['gender']}

', unix_timestamp(), '{$_POST['email']}

', -1, '$IP', '$IP')");
$i=$db->insert_id();
$db->query("INSERT INTO userstats VALUES($i, 10, 10, 10, 10, 10)");

if($_POST['ref']) {
	require "global_func.php";
	$db->query("UPDATE users SET crystals=crystals+100 WHERE userid={$_POST['ref']}

");
event_add($_POST['ref'],"For refering $username to the game, you have earnt 2 valuable crystals!",$c);
$db->query("INSERT INTO referals VALUES('', {$_POST['ref']}

, $i, unix_timestamp(),'{$r['lastip']}

','$IP')");
}

print "<font color='green'>You have signed up; enjoy the game!</font><br>
&gt; <a href='login.php'>Login</a>";
}

} else{
	
	if($set['regcap_on']){
		$chars="123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!?\\/%^";
		$len=strlen($chars);
		$_SESSION['captcha']="";
		for($i=0;$i<6;$i++)  $_SESSION['captcha'].=$chars[rand(0, $len - 1)];
	}

	print "<h3><font color='green'>{$set['game_name']}

 Registration</h3><font color='green'>";
print "<form action=register.php method=post>
<table width='75%' class='table' cellspacing='1'>
<tr>
<td width='30%'>Username</td>
<td width='40%'><input type=text name=username onkeyup='CheckUsername(this.value);'></td>
<td width='30%'><div id='usernameresult'></div></td>
</tr>
<tr>
<td>Password</td>
<td><input type=password id='pw1' name=password onkeyup='CheckPasswords(this.value);PasswordMatch();'></td>
<td><div id='passwordresult'></div></td>
</tr>
<tr>
<td>Confirm Password</td><td><input type=password name=cpassword id='pw2' onkeyup='PasswordMatch();'></td>
<td><div id='cpasswordresult'></div></td>
</tr>
<tr>
<td>Email</td><td><input type=text name=email onkeyup='CheckEmail(this.value);'></td>
<td><div id='emailresult'></div></td>
</tr>
<tr>
<td>Gender</td>
<td colspan='2'><select name='gender' type='dropdown'>
<option value='Male'>Male
<option value='Female'>Female</select></td>
</tr>
<tr>
</tr>
<input type=hidden name=ref value='";

if($_GET['REF']) {
	print $_GET['REF'];
}

print "' />";

if($set['regcap_on']){
	print "<tr>
<td colspan=3><img src='captcha_verify.php?bgcolor=C3C3C3' /><br />
<input type='text' name='captcha' /></td>
</tr>";
}

print "
<tr>
<td colspan=3 align=center><input type=submit value=Submit></td>
</tr>
</table>
</form><br />
&gt; <a href='login.php'>Go Back</a>";
}

print <<<OUT
</td>
<td class="rgrad"></td>
</tr>
<tr>
<td colspan="3">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td class="dgradl">&nbsp;</td>
<td class="dgrad">&nbsp;</td>
<td class="dgradr">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</body>
</html>
OUT;
?>
